上次消費到哪,還有哪些訊息需要被消費
。/opt/kafka/bin/kafka-consumer-groups.sh
在Kafka中,Consumer是負責從Broker拉取資料的實體。每個Consumer會對Broker指定其在某個Partition中的偏移量(Offset),並從該位置開始接收接下來的事件(Event)。
這種機制讓 Consumer 可以準確地從指定的事件開始進行消費,並掌握消費的進度。
這邊說明Consumer Group的組成,以及他們是如何被分配到該消費的Partition:
訂閱的Topic
進行資料消費,差別只是在有多個Instance時,效能會更好。一個Consumer Group中,理想的Instance數目 = 該Group訂閱的所有Topic的Partiton總數
。3 * 2
= 6
個。多餘的Consumer Instance不會被指派Partition進行消費,會浪費資源。上次消費到哪,還有哪些需要被消費
。enable.auto.commit
,預設為true
每5秒
自動提交,可以在Config修改auto.commit.interval.ms
來更改間隔時間test-group
這個Consumer group的Offset Map,紀錄了每個被訂閱的Topic中,各Partition的消費狀況:
topicA
的Partition 0
: Offset = 8
topicA
的Partition 1
: Offset = 6
以下這些常見名詞經常散落在Kafka的各種GUI介面與Console工具中,它們都和Offset有關。
在進行Debug或者優化效能瓶頸時,理解這些概念非常實用:
消息已經被拉取但尚未提交(Not Committed)
。kafka-consumer-groups.sh
可以查看 Consumer Group 的 Offset 狀況,範例指令如下:docker exec -it kafka ./opt/kafka/bin/kafka-consumer-groups.sh --bootstrap-server localhost:9092 \
--describe --group {ConsumerGroup名稱}
此指令會顯示以下關鍵資訊:
CURRENT-OFFSET
:該 Partition 最後一次提交的 Offset。LOG-END-OFFSET
:此 Partition 的最大 Offset(等同於資料總數)。LAG
:表示 Consumer 與當前最大 Offset 之間的差距。CLIENT-ID
:分配給各 Partition 的 Consumer Instance ID(如果有設置 client.id )。
除了Offset狀態,Consumer與Partition彼此的指派關係,也是Kafka管理的一大重點,根據不同的條件,有時會需要重新指定Partition被消費的對象。這個機制在下一章將繼續說明。
https://www.cnblogs.com/huxi2b/p/6223228.html